package edu.northwestern.cbits.purple_robot_manager.tests;
import junit.framework.Assert;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.support.v4.content.LocalBroadcastManager;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.probes.Probe;
import edu.northwestern.cbits.purple_robot_manager.probes.ProbeManager;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.RobotHealthProbe;
public class PurpleRobotHealthProbeTestCase extends RobotTestCase
{
public PurpleRobotHealthProbeTestCase(Context context, int priority)
{
super(context, priority);
}
public void test()
{
if (this.isSelected(this._context) == false)
return;
final ContentValues values = new ContentValues();
values.put("count", 0L);
values.put("start", Long.MAX_VALUE);
values.put("end", 0L);
BroadcastReceiver receiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String name = intent.getStringExtra("PROBE");
if (RobotHealthProbe.NAME.equals(name))
{
long count = values.getAsLong("count");
double start = values.getAsDouble("start");
double end = values.getAsDouble("end");
long time = intent.getLongExtra("TIMESTAMP", 0);
if (time < start)
start = time;
if (time > end)
end = time;
values.put("count", count + 1);
values.put("start", start);
values.put("end", end);
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Probe.PROBE_READING);
LocalBroadcastManager localManager = LocalBroadcastManager.getInstance(this._context);
localManager.registerReceiver(receiver, intentFilter);
try
{
this.broadcastUpdate("Enabling probe...");
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof RobotHealthProbe)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this._context);
Editor e = prefs.edit();
e.putString("config_probe_robot_frequency", "60000");
e.commit();
probe.enable(this._context);
}
}
Thread.sleep(2000);
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof RobotHealthProbe)
{
Assert.assertTrue("ATP0", probe.isEnabled(this._context));
}
}
this.broadcastUpdate("Sleeping. 300 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 270 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 240 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 210 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 180 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 150 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 120 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 90 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 60 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Sleeping. 30 seconds remaining...", 0);
Thread.sleep(30000);
this.broadcastUpdate("Halting data collection...", 0);
localManager.unregisterReceiver(receiver);
Thread.sleep(2000);
}
catch (InterruptedException e)
{
Assert.fail("PRHP1");
}
long count = values.getAsLong("count");
double start = values.getAsDouble("start");
double end = values.getAsDouble("end");
Assert.assertTrue("PRHP2", count > 4);
Assert.assertTrue("PRHP3", start > 0);
Assert.assertTrue("PRHP3", end < System.currentTimeMillis());
Assert.assertTrue("PRHP4", (end - start) > 240);
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof RobotHealthProbe)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this._context);
Editor e = prefs.edit();
e.putString("config_probe_robot_frequency", "300000");
e.commit();
}
}
}
public int estimatedMinutes()
{
return 1;
}
public String name(Context context)
{
return context.getString(R.string.name_health_probe_test);
}
}